package cn.kgc.tangcco.configurer;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.nio.charset.Charset;

/**
 * @author
 * @Description
 * @create 2020/12/30 14:46
 */
@Configuration
public class HttpConverterConfigurer {

    @Bean
    FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
        // 1.定义一个converters转换消息的对象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 2.添加fastjson的配置信息，比如: 是否需要格式化返回的json数据
        FastJsonConfig fastJsonConfig = new FastJsonConfig();

        // 3.配置json解析过程的一些细节：日期格式、数据编码、是否再在生成JSON中输出类名、是否输出value为null的数据、生成json格式化、空集合输出而非null、空字符串输出而非null
        fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
        fastJsonConfig.setCharset(Charset.forName("UTF-8"));
        fastJsonConfig.setSerializerFeatures(
                //
                //
                //
                /**
                 * 禁用循环引用$ref.xxx[x] 在spring data jpa环境下禁用该条配置 否则容易引发堆栈异常
                 * 比较好的是用@JsonBackReference。使用方法：在"多端"的getter 和setter方法上加上@JsonBackReference。如果是用的lombock。就加载属性字段上。
                 */
                // SerializerFeature.DisableCircularReferenceDetect,
                // SerializerFeature.WriteClassName,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.PrettyFormat,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullStringAsEmpty
        );
        fastConverter.setFastJsonConfig(fastJsonConfig);
        return fastConverter;
    }

}
